package com.pai4j.message.builder.interaction;

import com.pai4j.common.constants.MessageConstants;
import com.pai4j.common.enums.InteractionMessageTypeEnum;
import com.pai4j.domain.vo.dto.CommentReplyMessageDTO;
import com.pai4j.message.core.builder.AbstractMessageBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

/**
 * 评论消息构建器
 * 用于构建评论互动消息
 *
 * @author PAI4J Team
 * @date 2025-11-01
 */
@Slf4j
public class CommentMessageBuilder extends AbstractMessageBuilder<CommentReplyMessageDTO> {

    public CommentMessageBuilder() {
        super();
        context.setMessageTypeEnum(InteractionMessageTypeEnum.COMMENT);
        context.setType(MessageConstants.TypeEnum.COMMENT.getType());
        context.setCategory(MessageConstants.CategoryEnum.COMMENT_REPLY.getCategory());
    }

    @Override
    protected String getMessageCategory() {
        return MessageConstants.CategoryEnum.COMMENT_REPLY.getCategory();
    }

    @Override
    protected CommentReplyMessageDTO createMessageDTO() {
        return new CommentReplyMessageDTO();
    }

    @Override
    protected void fillMessageDTO(CommentReplyMessageDTO messageDTO) {
        // 填充资源信息
        if (context.getResourceType() != null) {
            messageDTO.setResourceType(context.getResourceType());
        }
        if (context.getResourceId() != null) {
            messageDTO.setResourceId(context.getResourceId());
        }

        // 如果内容为空，使用默认格式
        if (messageDTO.getContent() == null && context.getResourceInfo() != null) {
            String defaultContent = String.format("评论了你的%s", 
                    context.getResourceInfo().getDisplayTitle());
            messageDTO.setContent(defaultContent);
        }
    }

    @Override
    protected boolean doValidate() {
        // 评论需要有资源信息或评论内容
        if (StringUtils.isBlank(context.getContent()) && 
            (StringUtils.isBlank(context.getResourceType()) || StringUtils.isBlank(context.getResourceId()))) {
            log.warn("评论消息必须指定内容或资源信息");
            return false;
        }
        return true;
    }

    @Override
    protected String[] getTemplateVarNames() {
        return new String[]{"userName", "resourceType", "resourceTitle", "commentContent"};
    }

    /**
     * 快速构建评论消息
     */
    public static CommentMessageBuilder create() {
        return new CommentMessageBuilder();
    }
}

